home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung / Power-Programmierung (Tewi)(1994).iso / magazine / nan_news / vol3 / no1 / extend.inc < prev    next >
Text File  |  1988-08-09  |  3KB  |  103 lines

  1. {**
  2. *   EXTEND.INC
  3. *
  4. *   DEFINEs and EXTERNs for interfacing with Clipper from Pascal.
  5. *   Large model C only (double word pointers to code and data).
  6. *
  7. *   Modified from EXTEND.H
  8. *   Copyright (c) 1987, 1988 Nantucket Corp.
  9. }
  10.  
  11. #define CLIPPER      void pascal
  12.  
  13. { _parinfo types }
  14. #define UNDEF      0
  15. #define CHARACTER  1
  16. #define NUMERIC    2
  17. #define LOGICAL    4
  18. #define DATE       8
  19. #define ALIAS      16
  20. #define MPTR       32  {or'ed with type when passed by reference}
  21. #define MEMO       65
  22. #define WORD       128
  23. #define ARRAY      512
  24. #define NEWLINE    chr(13)
  25. #define ENDSTR     chr(0)
  26.  
  27. type
  28.    datestr   = packed array [1..8] of char;
  29.    charstr   = packed array [1..64] of char;
  30.  
  31.    { Header structure }
  32.    DBF_HEADER = record
  33.                    signature : byte;       {03 = dbf, 83 dbf+dbt}
  34.                    ymd       : array [1..3] of byte; {y+1900 m d}
  35.                    last_rec  : integer4;
  36.                    data_off  : quant;
  37.                    rec_size  : quant;
  38.                    pad       : array [1..20] of byte;
  39.                 end;
  40.  
  41.    dateptr   = ^datestr;
  42.    charptr   = ^charstr;
  43.    dbfhdrptr = ^DBF_HEADER;
  44.    byteptr   = ^byte;
  45.    adsdate   = ads of datestr;
  46.    adschar   = ads of charstr;
  47.    adsdbfhdr = ads of DBF_HEADER;
  48.    adsbyte   = ads of byte;
  49.  
  50. { parameter count/type }
  51. function _parinfo : integer [c, varying]; extern;
  52. function _parinfa : integer [c, varying]; extern;
  53.  
  54. { parameter values }
  55. function _parc    : adschar  [c, varying]; extern;
  56. function _parcsiz : integer  [c, varying]; extern;
  57. function _parclen : integer  [c, varying]; extern;
  58. function _parni   : integer  [c, varying]; extern;
  59. function _parnl   : integer4 [c, varying]; extern;
  60. function _parnd   : real8    [c, varying]; extern;
  61. function _parl    : integer  [c, varying]; extern;
  62. function _pards   : adsdate  [c, varying]; extern;
  63.  
  64. { one and only one of the _ret?? functions must be used }
  65.  
  66. { Clipper-function return values }
  67. { function _retc    : adschar  [c, varying]; extern; }
  68. function _retclen : adschar  [c]; extern;
  69. function _retni   : integer  [c]; extern;
  70. function _retnl   : integer4 [c]; extern;
  71. function _retnd   : real8    [c]; extern;
  72. function _retl    : integer  [c]; extern;
  73. function _retds   : adschar  [c]; extern;
  74.  
  75. { procedure (DO) return }
  76. procedure _ret               [c]; extern;
  77.  
  78. { allocate memory                           }
  79. { parameter:  requested size in bytes       }
  80. { returns:    far pointer to memory or NULL }
  81. function _exmgrab(vars k :integer) : adsbyte [c]; extern;
  82.  
  83. { free allocated memory }
  84. {params: pointer from _exmgrab(), same size passed to _exmgrab()}
  85. procedure _exmback(vars l : adsmem; vars m : byte); extern;
  86.  
  87. { misc. }
  88. function strlen(vars m : adschar) : byte; extern;
  89.  
  90. { parameter check macros }
  91. #define PCOUNT      (_parinfo(0))
  92. #define ISCHAR(n)   (_parinfo(n) = CHARACTER)
  93. #define ISNUM(n)    (_parinfo(n) = NUMERIC)
  94. #define ISLOG(n)    (_parinfo(n) = LOGICAL)
  95. #define ISDATE(n)   (_parinfo(n) = DATE)
  96. #define ISMEMO(n)   (_parinfo(n) = MEMO)
  97. #define ISBYREF(n)  (_parinfo(n) = MPTR)
  98. #define ISARRAY(n)  (_parinfo(n) = ARRAY)
  99. #define ALENGTH(n)  (_parinfa(n, 0))
  100.  
  101. function _dbfhead : adsdbfhdr [c, varying]; extern;
  102. function _dbfopen : integer   [c, varying]; extern;
  103.